#!/usr/bin/tclsh
# switch kinematics and change axis limits to equiv joint limits
set kinstype       1     ;# 1: IDENTITY kins
set switchkins_pin 3     ;# agree with inifile
set max_joints     6     ;# agree with inifile
set coords "x y z a b c" ;# agree with module coordinates=

package require Linuxcnc ;# must be beore Hal
emc_init -quick
package require Hal
parse_ini $::env(INI_FILE_NAME)

# SET axis limits for IDENTITY kins using INI joint limits
for {set j 0} {$j < $max_joints} {incr j} {
  set l [lindex $coords $j]
  catch {hal setp ini.$l.min_limit        [set ::JOINT_[set j](MIN_LIMIT)]}
  catch {hal setp ini.$l.max_limit        [set ::JOINT_[set j](MAX_LIMIT)]}
  catch {hal setp ini.$l.max_velocity     [set ::JOINT_[set j](MAX_VELOCITY)]}
  catch {hal setp ini.$l.max_acceleration [set ::JOINT_[set j](MAX_ACCELERATION)]}
}

set script [info script]
switch  -exact [emc_mode] {
  mdi     { emc_mdi m68 e$switchkins_pin q$kinstype ;# switch
            emc_mdi m66 e0l0                        ;# sync
            puts "$script: MDI: Limits updated and kins switched to type$kinstype"
          }
  manual  {puts "$script: Must be in mdi mode"}
  auto    {puts "$script: Limits updated in auto mode, sync required"}
  default {puts "$script: Unknown mode"}
}
# gcode programs should follow this command
# with M429 to switch kinematics and sync
